﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Security.Cryptography;

namespace FrbaCommerce.Abm_Cliente
{
    public partial class FormAltaCliente : Form
    {
        

        public FormAltaCliente()
        {
            InitializeComponent();
            comboBoxTipoDoc.SelectedIndex = 0;
            monthCalendarNacimiento.TodayDate = Program.FechaActual;
        }

        public int altaCliente(Registro_de_Usuario.FormRegistroUsuario.Usuario user, Registro_de_Usuario.FormRegistroUsuario.Cliente client) {

            SqlConnection con = Program.obtenerConexion();

            Codigo_reutilizable.PasswordHash password = new Codigo_reutilizable.PasswordHash();
            //Hago 2 consultas, en una creo el usuario, en la otra el cliente para ese usuario
            //Este codigo se repite con empresa, ver si lo podemos unificar
            //Aparte, chequeo que el usuario no exista!
            SqlCommand verificarExistencia = new SqlCommand("SELECT COUNT(*) FROM Monkey_coders.Usuarios WHERE usr_name = '" + user.nombre + "'", con);
            
            if (Convert.ToInt32(verificarExistencia.ExecuteScalar()) == 1)
            {
                MessageBox.Show("El usuario ya esta en uso, por favor eliga otro nombre de usuario");
                return 1;
            }
     
            //Compruebo que no se repitan: DNI y TELEFONO

            SqlCommand checkDNI = new SqlCommand("SELECT COUNT(cli_dni) FROM Monkey_Coders.Clientes WHERE cli_tipo_doc = '" + comboBoxTipoDoc.Text + "' AND cli_dni = " + client.DNI + " GROUP BY cli_dni, cli_tipo_doc", con);
            if (Convert.ToInt32(checkDNI.ExecuteScalar()) > 0)
            {
                MessageBox.Show("El DNI ya se encuentra registrado", "Error",
                 MessageBoxButtons.OK, MessageBoxIcon.Error);
                return 1;
            }

            //Telefono
            SqlCommand checkTEL = new SqlCommand("SELECT COUNT(cli_telefono) FROM Monkey_Coders.Clientes WHERE cli_telefono = " + client.Tel + " GROUP BY cli_telefono", con);
            if (Convert.ToInt32(checkTEL.ExecuteScalar()) > 0)
            {
                MessageBox.Show("El Teléfono ya se encuentra registrado", "Error",
                 MessageBoxButtons.OK, MessageBoxIcon.Error);
                return 1;
            }

            //Creo el usuario

            SqlCommand altaUsuario = new SqlCommand("INSERT INTO [Monkey_Coders].Usuarios (usr_name,usr_passwd,usr_habilitado) OUTPUT INSERTED.usuario_id VALUES (@User,@PW,@Hab)", con);
            altaUsuario.Parameters.Add("User", SqlDbType.VarChar, 255).Value = user.nombre;
            altaUsuario.Parameters.Add("PW", SqlDbType.VarChar, 64).Value = password.SHA256Encrypt(user.pw);
            altaUsuario.Parameters.Add("Hab", SqlDbType.Bit, 1).Value = user.hab;
            Int32 newID = Convert.ToInt32(altaUsuario.ExecuteScalar());

            //Pido el usuario

            SqlCommand altaCliente = new SqlCommand("INSERT INTO [Monkey_Coders].Clientes (cli_usuario_id, cli_dni, cli_apellido, cli_nombre, cli_tipo_doc, cli_mail, cli_telefono, cli_dom_calle, cli_nro_calle, cli_piso, cli_dpto, cli_cod_postal, cli_fecha_nac) VALUES (@ID, @DNI, @Ape, @Nom, @TipoDoc, @Mail, @Tel, @Dom, @Nro, @Piso, @Depto, @CP, @FechaNac)", con);
            altaCliente.Parameters.Add("ID", SqlDbType.Int, 18).Value = newID;
            altaCliente.Parameters.Add("DNI", SqlDbType.Int, 18).Value = client.DNI;
            altaCliente.Parameters.Add("Ape", SqlDbType.VarChar, 255).Value = client.Ape;
            altaCliente.Parameters.Add("Nom", SqlDbType.VarChar, 255).Value = client.Nom;
            altaCliente.Parameters.Add("TipoDoc", SqlDbType.VarChar, 50).Value = client.TDNI;
            altaCliente.Parameters.Add("Mail", SqlDbType.VarChar, 255).Value = client.Mail;
            altaCliente.Parameters.Add("Tel", SqlDbType.BigInt, 11).Value = client.Tel;
            altaCliente.Parameters.Add("Dom", SqlDbType.VarChar, 255).Value = client.Dom;
            altaCliente.Parameters.Add("Nro", SqlDbType.Int, 18).Value = client.Nro;
            altaCliente.Parameters.Add("Piso", SqlDbType.Int, 18).Value = client.Piso;
            altaCliente.Parameters.Add("Depto", SqlDbType.VarChar, 50).Value = client.Dpto;
            altaCliente.Parameters.Add("CP", SqlDbType.VarChar, 50).Value = client.CP;
            altaCliente.Parameters.Add("FechaNac", SqlDbType.Date, 50).Value = client.fechaNac;

            altaCliente.ExecuteNonQuery();

            //Relaciono al Usuario con el Rol
            SqlCommand altaClienteRol = new SqlCommand("INSERT INTO [Monkey_Coders].usuario_rol(ur_rol_id, ur_user_id) VALUES (3, @ID)", con);
            altaClienteRol.Parameters.Add("ID", SqlDbType.Int, 18).Value = newID;
            altaClienteRol.ExecuteNonQuery();

            return 0;
        }


        private void buttonAltaCliente_Click(object sender, EventArgs e)
        {
            //Usuario estándar

            Registro_de_Usuario.FormRegistroUsuario.Usuario defaultUser;
            //El nombre de usuario DEFAULT va a ser defaultUSER + el último ID + 1

            SqlConnection con = Program.obtenerConexion();

            SqlCommand getLastID = new SqlCommand("SELECT MAX(usuario_id) FROM Monkey_Coders.Usuarios", con);
            

            defaultUser.nombre = "defaultUSER" + (Convert.ToInt32(getLastID.ExecuteScalar()) + 1);
            defaultUser.pw = "1234";
            defaultUser.hab = true;
            defaultUser.des = false;

            Registro_de_Usuario.FormRegistroUsuario.Cliente client;
            client.DNI = Convert.ToInt32(textBoxDNI.Text);
            client.Ape = textBoxApellido.Text;
            client.Nom = textBoxNombre.Text;
            client.TDNI = Convert.ToString(comboBoxTipoDoc.SelectedValue);
            client.Mail = textBoxMail.Text;
            client.Tel = Convert.ToInt64(textBoxTel.Text);
            client.Dom = textBoCalle.Text;
            client.Nro = Convert.ToInt32(textBoxNro.Text);
            client.Piso = Convert.ToInt32(textBoxPiso.Text);
            client.Dpto = textBoxDepto.Text;
            client.CP = Convert.ToInt32(textBoxCP.Text);
            client.fechaNac = monthCalendarNacimiento.SelectionEnd.ToShortDateString();

            if (altaCliente(defaultUser, client) == 0)
            {
                MessageBox.Show("Alta exitosa!");
                this.Close();
            }
        }

        private void textBoxNro_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {

        }

    }
}